﻿/*****************************************************************//**
 *
 * @file   FITKAbaqusAdaptorMaterialElastic.h
 * @brief  Abaqus Material Elastic 适配器 用于读取INP过程中的Material 弹性项 解析。
 * @author fulipeng (flipengqd@yeah.net)
 * @date   2024-03-19
 *
 *********************************************************************/
#ifndef __FITKABAQUSADAPTORMATERIALDLASTIC__H__
#define __FITKABAQUSADAPTORMATERIALDLASTIC__H__

#include "FITKAbaqusAbstractAdaptor.h"
#include "FITK_Kernel/FITKAdaptor/FITKIOAdaptorFactory.h"

 //前置声明
ForwardDeclarNS(AbaqusData, FITKDataCase)
ForwardDeclarNS(Interface, FITKAbaMaterial)
ForwardDeclarNS(Interface, FITKAbaMaterialElastic)

namespace IO
{
    /**
     * @brief Abaqus Material Elastic 读写适配器
     * @author fulipeng (fulipengqd@yeah.net)
     * @date 2024-03-21
     */
    class FITKAbaqusAdaptorMaterialElastic : public FITKAbaqusAbstractAdaptor
    {
    public:
        explicit FITKAbaqusAdaptorMaterialElastic() = default;
        ~FITKAbaqusAdaptorMaterialElastic() = default;
        /**
         * @brief 获取适配器数据类型名
         * @return 适配器数据类型名
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-20
         */
        QString getAdaptorClass() override;

        /**
         * @brief 适配器读取
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-20
         */
        bool adaptR() override;

        /**
         * @brief 适配器写出
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-20
         */
        bool adaptW() override;
    private:
        /**
         * @brief 读取类型为各向同性
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool readTypeIsotroplc();
        /**
         * @brief 读取类型为工程常数
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool readTypeEngineeringConstants();
        /**
         * @brief 读取类型为单层板
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool readTypeLamina();
        /**
         * @brief 读取类型为正交
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool readTypeOrthotropics();
        /**
         * @brief 读取类型为各向异性
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool readTypeAnIsotopic();
        /**
         * @brief 读取类型为面作用力
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool readTypeTraction();
        /**
         * @brief 读取类型为耦合表面作用力
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool readTypeCoupledTraction();
        /**
         * @brief 读取类型为剪切
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool readTypeShear();
        /**
         * @brief 写出类型为各向同性
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool writeTypeIsotroplc();
        /**
         * @brief 写出类型为工程常数
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool writeTypeEngineeringConstants();
        /**
         * @brief 写出类型为单层板
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool writeTypeLamina();

    private:

        /**
         * @brief 材料数据
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-03-20
         */
        Interface::FITKAbaMaterial* _materialData{};
        /**
         * @brief 场边量个数
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        int _dependencies{ 0 };
    };

    Register2FITKIOAdaptorFactory(INP, Interface::FITKAbaMaterialElastic, FITKAbaqusAdaptorMaterialElastic)

}

#endif
